/* !FormText.msgtrans.c */
/* MessageTrans handling */

#include <ctype.h>
#include <stdlib.h>
#include <string.h>

#include "swis.h"

#include "err.h"
#include "msgtrans.h"
#include "nfstr.h"

MessagesFD msgs_descriptor;

const char *msgtrans_lookup(MessagesFD *desc, const char *token)
{
  char *result;
  if (err_check(_swix(MessageTrans_Lookup, _INR(0,2)|_OUT(2),
  	desc, token, 0, &result)))
    result = "";
  return result;
}

_kernel_oserror *msgtrans_load(const char *filename, MessagesFD *descriptor,
	char **bufferout)
{
  int size;
  char *buffer;
  _kernel_oserror *result;
  result = _swix(MessageTrans_FileInfo, _IN(1) | _OUT(2), filename, &size);
  if (result)
    return result;
  buffer = malloc(size);
  if (!buffer)
    return msgs_nomem();
  if (!buffer)
    return 0;
  if (bufferout)
    *bufferout = buffer;
  memset(descriptor, 0, sizeof(MessagesFD));
  return _swix(MessageTrans_OpenFile, _INR(0,2), descriptor, filename, buffer);
}

_kernel_oserror *msgtrans_close(MessagesFD *descriptor)
{
   return _swix(MessageTrans_CloseFile, _IN(0), descriptor);
}

_kernel_oserror *msgtrans_error(MessagesFD *descriptor, const char *token)
{
  static _kernel_oserror err;
  err.errnum = 0;
  strncpyC(err.errmess, msgtrans_lookup(descriptor, token), 252);
  return &err;
}
